// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Broken Monitor Object
// Script Author: Christian Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

// Aliases
private alias 14 : TYPE_BROKENMONITOR

// Function declarations
reserve function BrokenMonitor_DummyFunction

// Static Values
public value BrokenMonitor_value27 = 0;


function BrokenMonitor_DummyFunction
end function


event ObjectMain

	switch object.state
	case 0
		if object.value1 < 0
			object.value0 += object.value1
			object.value1 += 0x1800
		else
			object.value1 = 0
		end if
		if object.value1 == 0
			object.state = 1
			object.inkEffect = INK_ALPHA
			currentPlayer = object.value3
			switch object.propertyValue
			case 1
				player.score += 100
				object[currentPlayer].value0 += 10
				if ringPan == 0
					PlaySfx(SfxName[10 Ring], 0)
					SetSfxAttributes(SfxName[10 Ring], -1, -100)
					ringPan = 1
				else
					PlaySfx(SfxName[10 Ring], 0)
					SetSfxAttributes(SfxName[10 Ring], -1, 100)
					ringPan = 0
				end if
				if object[currentPlayer].value0 > 999
					object[currentPlayer].value0 = 999
				end if
				if object[0].value0 >= ringExtraLife
					if options.expertmode == 1
						player.lives++
						PlaySfx(SfxName[Life], 0)
						PauseMusic()
						ResetObjectEntity(25, TypeName[Music Event], 2, 0, 0)
						object[25].priority = PRIORITY_ACTIVE
					end if
					ringExtraLife += 100
					if ringExtraLife > 300
						ringExtraLife = 1000
					end if
				end if
				break
			case 2
				PlaySfx(SfxName[Blue Shield], 0)
				arrayPos0 = playerCount
				arrayPos0 += currentPlayer
				object[currentPlayer].value37 = 1
				if PlayerObject_SuperState != 1
					if object[arrayPos0].type != invincibilityType
						CallFunction(PlayerObject_RestorePowerup)
					end if
				end if
				break
			case 3
				if PlayerObject_SuperState != 1
					arrayPos0 = playerCount
					arrayPos0 += currentPlayer
					ResetObjectEntity(arrayPos0, invincibilityType, 0, object[currentPlayer].xpos, object[currentPlayer].ypos)
					object[arrayPos0].priority = PRIORITY_ACTIVE
					object[currentPlayer].value7 = 0x4EC
					PlayMusic(2)
				end if
				break
			case 4	
				CallFunction(SpeedUpMusic)	
				object[currentPlayer].value6 = 0x528
				CallFunction(PlayerObject_SwitchPhysicsState)
				break
			case 5
			case 6
			case 7
				arrayPos0 = 25
				if object[currentPlayer].value16 == 0
					arrayPos0 += currentPlayer
				end if
				player.lives++
				PlaySfx(SfxName[Life], 0)
				PauseMusic()
				ResetObjectEntity(25, TypeName[Music Event], 2, 0, 0)
				object[25].priority = PRIORITY_ACTIVE
				break
			case 8
				currentPlayer = 0
				object[0].value0 += 50
				if PlayerObject_SuperState != 1
					object.type = object[0].type
					CallFunction(PlayerObject_SuperTransform)
					object.type = TypeName[Broken Monitor]
				else
					if ringPan == 0
						PlaySfx(SfxName[Ring L], 0)
						SetSfxAttributes(SfxName[Ring L], -1, -100)
						ringPan = 1
					else
						PlaySfx(SfxName[Ring R], 0)
						SetSfxAttributes(SfxName[Ring R], -1, 100)
						ringPan = 0
					end if
				end if
				if object[0].value0 > 999
					object[0].value0 = 999
				end if
				if object[0].value0 >= ringExtraLife
					if options.gameMode != 2
						//player.lives++
						//PlaySfx(SfxName[Life], 0)
						//PauseMusic()
						//ResetObjectEntity(25, TypeName[Music Event], 2, 0, 0)
						//object[25].priority = PRIORITY_ACTIVE
					end if
					ringExtraLife += 100
					if ringExtraLife > 300
						ringExtraLife = 1000
					end if
				end if
				break
			case 9
				PlaySfx(SfxName[Bubble Shield], 0)
				arrayPos0 = playerCount
				arrayPos0 += currentPlayer
				object[currentPlayer].value37 = 2
				if PlayerObject_SuperState != 1
					if object[arrayPos0].type != invincibilityType
						CallFunction(PlayerObject_RestorePowerup)
					end if
				end if
				if object[currentPlayer].value4 >= 3
					object[currentPlayer].value3 = 0
					object[currentPlayer].value4 = 0
					CallFunction(BrokenMonitor_value27)
				end if
				break
			case 10
				PlaySfx(SfxName[Fire Shield], 0)
				arrayPos0 = playerCount
				arrayPos0 += currentPlayer
				object[currentPlayer].value37 = 3
				if PlayerObject_SuperState != 1
					if object[arrayPos0].type != invincibilityType
						CallFunction(PlayerObject_RestorePowerup)
					end if
				end if
				break
			case 11
				PlaySfx(SfxName[Lightning Shield], 0)
				arrayPos0 = playerCount
				arrayPos0 += currentPlayer
				object[currentPlayer].value37 = 4
				if PlayerObject_SuperState != 1
					if object[arrayPos0].type != invincibilityType
						CallFunction(PlayerObject_RestorePowerup)
					end if
				end if
				break
			case 12
				CallFunction(PlayerObject_Hit)
				break
			case 13
				CreateTempObject(TypeName[VS Game], 0, object.xpos, object.ypos)
				object[tempObjectPos].state = 1
				PlaySfx(SfxName[Teleport], 0)
				break
			case 14
				PlaySfx(SfxName[Spike], 0)
				options.spikeBehavior ^= 1
				break
			case 15
				PlaySfx(SfxName[Blue Shield], 0)
				options.shieldType++
				options.shieldType &= 3
				arrayPos0 = playerCount
				currentPlayer = 0
				CallFunction(PlayerObject_RestorePowerup)
				break
			case 16
				if specialStage.emeralds == 127 // Not 127 emeralds, just 01111111, or seven ones, in binary
					specialStage.emeralds = 0
				else
					specialStage.emeralds = 127
				end if
				PlaySfx(SfxName[Transform], 0)
				break
			end switch
		end if
		break
	case 1
		object.value1++
		if object.value1 == 30
			object.value1 = 0
			object.state = 2
			object.propertyValue = 0
			if object.priority != PRIORITY_XBOUNDS_DESTROY
				object.priority = PRIORITY_ACTIVE_BOUNDS
			end if
		else
			if object.value1 > 14
				object.alpha -= 16
			end if
		end if
		break
	end switch
end event


event ObjectDraw
	DrawSprite(0)
	if object.propertyValue > 0
		DrawSpriteFX(object.propertyValue, FX_INK, object.xpos, object.value0)
	end if
end event


event ObjectStartup
	LoadSpriteSheet("Global/Items.gif")
	SpriteFrame(-16, 0, 32, 16, 18, 34)
	SpriteFrame(-8, -9, 16, 14, 18, 66)
	SpriteFrame(-8, -9, 16, 14, 35, 66)
	SpriteFrame(-8, -9, 16, 14, 18, 81)
	SpriteFrame(-8, -9, 16, 14, 35, 81)
	SpriteFrame(-8, -9, 16, 14, 18, 96)
	SpriteFrame(-8, -9, 16, 14, 35, 96)
	SpriteFrame(-8, -9, 16, 14, 18, 111)
	SpriteFrame(-8, -9, 16, 14, 35, 111)
	SpriteFrame(-8, -9, 16, 14, 18, 141)
	SpriteFrame(-8, -9, 16, 14, 35, 126)
	SpriteFrame(-8, -9, 16, 14, 18, 126)
	SpriteFrame(-8, -9, 16, 14, 35, 141)
	SpriteFrame(-8, -9, 16, 14, 18, 156)
	SpriteFrame(-8, -9, 16, 14, 35, 156)
	SpriteFrame(-8, -9, 16, 14, 18, 171)
	SpriteFrame(-8, -9, 16, 14, 35, 171)
	BrokenMonitor_value27 = BrokenMonitor_DummyFunction
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
